package xim

import "gitee.com/xiaoyutab/xgotool/xerror"

// 聊天窗查询的数据结构体信息
type MyChatStruct struct {
	ChatId            uint64 `json:"chat_id" form:"chat_id"`                         // 聊天窗ID
	Goos              string `json:"goos" form:"goos"`                               // 设备系统【仅限设备间通讯】
	Thumb             uint   `json:"thumb" form:"thumb"`                             // 群图标ID
	Desc              string `json:"desc" form:"desc"`                               // 群简介/公告
	IsManagement      uint8  `json:"is_management" form:"is_management"`             // 是否是群管理
	IsSilence         uint8  `json:"is_silence" form:"is_silence"`                   // 群是否禁言/我是否被禁言
	IsTop             uint8  `json:"is_top" form:"is_top"`                           // 是否置顶
	IsUnInterruptions uint8  `json:"is_un_interruptions" form:"is_un_interruptions"` // 是否开启免打扰
	Nickname          string `json:"nickname" form:"nickname"`                       // 我在群中的昵称
	TypeId            uint8  `json:"type_id" form:"type_id"`                         // 类型 1-设备间通信 2-用户间通信 3-群聊天
	Arch              string `json:"arch" form:"arch"`                               // 设备CPU架构【仅限设备间通讯】
	DerviceId         uint   `json:"dervice_id" form:"dervice_id"`                   // 设备ID【仅限设备间通讯】
	Hostname          string `json:"hostname" form:"hostname"`                       // 设备名称【仅限设备间通讯】
	MessageId         uint64 `json:"message_id" form:"message_id"`                   // 当前已读消息ID
	Name              string `json:"name" form:"name"`                               // 群名称/群备注名称
	NoRead            int64  `json:"no_read" form:"no_read"`                         // 未读消息数量
}

// 获取我的最近聊天列表
//
//	uid	用户ID
func MyChat(uid uint) ([]MyChatStruct, error) {
	if uid == 0 {
		return nil, xerror.New("用户未登录")
	}
	if _default.DB == nil {
		return nil, xerror.New("数据库未连接")
	}
	var inf []MyChatStruct
	err := sql.RunNameReplaceScan("sql/get-chat", sqlRep(0), sqlRep(1), &inf, uid)
	if err != nil {
		return nil, err
	}
	// 获取未读消息数量
	for i, v := range inf {
		var counts int64
		_default.DB.Table(_default.MessageTable).
			Where("id > ?", v.MessageId).
			Where("chat_id", v.ChatId).
			Where("is_deleted", 0).
			Count(&counts)
		inf[i].NoRead = counts
	}
	return inf, nil
}
